C 언어 포인터로 1차원 배열 참조하기
변수 및 상수에 대한 참조를 할 수 있는 것처럼 배열에 대해서도 포인터 변수를 사용해서 참조해서 빠르게 사용할 수 있습니다. 우리가 지금까지 사용했던 배열의 이름은 그 자체가 배열의 시작 주소(첫 번째 요소의 주소)를 가지고 있는 포인터입니다.
<그림> 포인터 배열
arr[0] | arr[1] | arr[2] |
1 | 3 | 5 |
*(ptr + 0) | *(ptr + 1) | *(ptr + 2) |
<코드> pointer_array.c
#include <stdio.h>
int main()
{
int arr[3] = { 1, 3, 5 };
int* ptr1 = arr; //[1] 배열 이름은 배열의 시작 주소
int* ptr2 = &arr[0]; //[2] 0번째 배열의 시작 주소는 배열의 이름과 동일
printf("%d, %d, %d\n", arr[0], arr[1], arr[2]); // 배열 직접 출력
printf("%d, %d, %d\n", *ptr1, *(ptr1 + 1), *(ptr1 + 2)); // 포인터로 배열 출력
printf("%d, %d, %d\n", *(ptr2 + 0), *(ptr2 + 1), *(ptr2 + 2));
return 0;
}
</코드>
<실행.
1, 3, 5
1, 3, 5
1, 3, 5
</실행>
배열의 이름인 arr과 첫 번째 배열 요소의 주솟값은 같은 주솟값을 반환해 줍니다. 그래서 [1]과 [2] 코드 모양은 같은 배열을 참조합니다.
그리고 포인터 배열을 역참조할 때에는 포인터 변수에 산술 연산자를 사용하여 + n 만큼 증가하면서 배열의 값을 참조할 수 있습니다.
*ptr1과 *(ptr1 + 0)은 같은 내용이므로 원하는 모양을 사용하면 됩니다.
Comments
Comments are closed